# 使用xpath进行页面解析
# 首先需要进行安装pip install lxml
#安装成功之后引入当前项目即可
from lxml import etree
xml="""
<book>
     <id>1</id>
     <name>野花遍地⾹</name>
     <price>1.23</price>
     <nick>臭⾖腐</nick>
     <author>
         <nick class="joy">周杰伦</nick>
         <nick class="jolin">蔡依林</nick>
         <nick id="xzq">薛之谦</nick>
         <nick id="syz">孙燕姿</nick>
         <div>
             <span>
                 <nick>刘亦菲</nick>
             </span>
         </div>                 
         <span>
             <nick>迪丽热巴</nick>
         </span>
           <div>
             <nick>杨幂</nick>
         </div>
     </author>
     <partner>
         <nick id="ppc">刘诗诗</nick>
         <nick id="ppbc">唐嫣</nick>
     </partner>
</book>
"""
# XML可以用来解析XML类型的文本
tree=etree.XML(xml)
# 调用xpath方法可以通过节点路径的方式获取标记
result1=tree.xpath("/book")  #表示获取book标记
print(result1)
result2=tree.xpath("/book/author")  #表示获取book下面的author标签
print(result2)
result3=tree.xpath("/book/author/nick/text()")  #text()可以获取标签中的文本内容
print(result3)
result4=tree.xpath("/book/author//nick/text()")  #//表示后代，直接或间接子节点
print(result4)
result5=tree.xpath("/book/author/*/nick/text()")  # * 表示通配符，为任意标记的含义
print(result5)
# 思考想要拿到页面上所有nick标签中的文本该怎么操作？
result6=tree.xpath("/book//nick/text()")  # 关键所有nick节点的付标记，通过付标记哪所有的直接后果间接子节点中的内容即可
print(result6)
# parse可以用来加载一个文件
stree=etree.parse("首页.html")
result7=stree.xpath("/html/body/ul/li/a/text()")
print(result7)
# 可以通过下标从一组标记中拿到指定的标签   下标从1开始
result8=stree.xpath("/html/body/ul/li[1]/a/text()")
print(result8)
#获取标签的属性  使用@表示属性
result9=stree.xpath("/html/body/ul/li/a/@href")
print(result9)
# 可以通过标记的指定属性定位到具体的元素
result10=stree.xpath("/html/body/ol/li/a[@href='feiji']/text()")
print(result10)
# 获取ol下面的所有的li标记
result11=stree.xpath("/html/body/ol/li")
for item in result11:
    # 在当前节点下近一步进行查找，需要使用./表示退回到当前标记，之后在向下查询即可
    print(item.xpath("./a/text()"))
    pass
# 可以利用抓包工具，选中要进行定位的元素，copy xpath 直接拿到该元素的xpath值，然后进行微调即可
result12=stree.xpath("/html/body/div/text()")
print(result12)





